home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / cdc / src / scsic.s < prev    next >
Text File  |  1997-05-29  |  11KB  |  654 lines

  1. **************************************************
  2. *
  3. *    コマンド実行
  4. *
  5. *
  6. **************************************************
  7.     .globl _scsi_cmd
  8. _scsi_cmd:
  9.     link a6,#-4
  10.     move.w    #1,_ScscUse
  11.  
  12.     movem.l    a1/d3-d6,-(sp)
  13.  
  14.     suba.l    a1,a1
  15.     IOCS    _B_SUPER
  16.     move.l    d0,-(sp)
  17.  
  18.     tst.w    _DiSwc
  19.     beq    @f
  20.     move.w    sr,-(sp)
  21.     DI
  22. @@:
  23.     move.w    $0a0e.w,-(sp)        *現在処理中のIOCSコール番号(なければ-1)
  24.     move.w    #$00F5,$0a0e.w        *現在処理中のIOCSコール番号(なければ-1)
  25.     move.l    _SCSI_IDF,d4
  26.     SCSI__    _S_SELECT
  27.     tst.l    d0
  28.     beq    @f
  29.     moveq    #-4,d0        *エラー
  30.     bra    1f
  31. @@:
  32.     movea.l    12(a6),a1
  33.     move.l    8(a6),d3
  34.      move.b    _SCSI_LUN,d0        **
  35.      andi.b    #$1F,1(a1)        **
  36.      or.b    d0,1(a1)        **
  37.      SCSI__    _S_CMDOUT
  38.     tst.l    d0
  39.     beq    @f
  40.     moveq    #-3,d0        *エラー
  41.     bra    1f
  42. @@:
  43.     move.l    16(a6),d3    *データは欲しがっているか?
  44.     tst.l    d3
  45.     beq    @f
  46.     *move.l    16(a6),d3
  47.     movea.l    20(a6),a1
  48.     SCSI__    _S_DATAIN_P
  49.     tst.l    d0
  50.     bpl    @f
  51.     lea    -1(a6),a1
  52.     SCSI__    _S_STSIN
  53.     SCSI__    _S_MSGIN
  54.     moveq    #-5,d0        *エラー
  55.     bra    1f
  56. @@:
  57.     lea    -1(a6),a1
  58.     SCSI__    _S_STSIN
  59.     tst.l    d0
  60.     beq    @f
  61.     moveq    #-2,d0        *エラー
  62.     bra    1f
  63. @@:
  64.     lea    -3(a6),a1
  65.     SCSI__    _S_MSGIN
  66.     tst.l    d0
  67.     beq    @f
  68.     moveq    #-1,d0        *エラー
  69.     bra    1f
  70. @@:
  71.     moveq    #0,d0
  72.     move.b    -3(a6),d0
  73.     swap    d0
  74.     move.b    -1(a6),d0
  75. 1:
  76.     move.w    (sp)+,$0a0e.w        *現在処理中のIOCSコール番号(なければ-1)
  77.  
  78.     tst.w    _DiSwc
  79.     beq    @f
  80.     move.w    (sp)+,sr        *(EI)
  81. @@:
  82.     cmpi.l    #2,d0
  83.     bne    @f
  84.     jbsr    _REQUEST_SENSE
  85. @@:
  86.     move.l    d0,d6
  87.     move.l    (sp)+,d0
  88.     bmi    @f
  89.     movea.l    d0,a1
  90.     IOCS    _B_SUPER
  91. @@:
  92.     move.l    d6,d0
  93.     movem.l    (sp)+,a1/d3-d6
  94.     clr.w    _ScscUse
  95.     unlk a6
  96.     rts
  97.  
  98.  
  99. **************************************************
  100. *
  101. *    コマンド実行(途中終了バージョン)
  102. *
  103. **************************************************
  104.     .globl _scsi_cmd_hf
  105. _scsi_cmd_hf:
  106.     link a6,#-4
  107.     move.w    #1,_ScscUse
  108.  
  109.     movem.l    a1/d3-d6,-(sp)
  110.     move.l    _SCSI_IDF,d4
  111.     SCSI__    _S_SELECT
  112.     tst.l    d0
  113.     beq    @f
  114.     moveq    #-4,d0        *エラー
  115.     bra    1f
  116. @@:
  117.     movea.l    12(a6),a1
  118.     move.l    8(a6),d3
  119.      move.b    _SCSI_LUN,d0        **
  120.      andi.b    #$1F,1(a1)        **
  121.      or.b    d0,1(a1)        **
  122.      SCSI__    _S_CMDOUT
  123.     tst.l    d0
  124.     beq    @f
  125.     moveq    #-3,d0        *エラー
  126.     bra    1f
  127. @@:
  128.     move.l    16(a6),d3    *データは欲しがっているか?
  129.     tst.l    d3
  130.     beq    @f
  131.     *move.l    16(a6),d3
  132.     movea.l    20(a6),a1
  133.     SCSI__    _S_DATAIN_P
  134.     tst.l    d0
  135.     bpl    @f
  136.     lea    -1(a6),a1
  137.     SCSI__    _S_STSIN
  138.     SCSI__    _S_MSGIN
  139.     moveq    #-5,d0        *エラー
  140.     bra    1f
  141. @@:
  142.     movem.l    (sp)+,a1/d3-d6
  143.  
  144.     move.w    #1,_ScscChksw        *1;STSIN MSGIN の実行待ち
  145.     *clr.w    _ScscUse
  146.     unlk a6
  147.     rts
  148.  
  149. 1:    *======= エラー
  150.     movem.l    (sp)+,a1/d3-d6
  151.  
  152.     clr.w    _ScscUse
  153.     unlk a6
  154.     rts
  155.  
  156.  
  157.     ***************
  158.     *
  159.     *   チェック用
  160.     *
  161.     ***************
  162. _scsi_cmd_chk:
  163.     tst.w    _ScscChksw        *1;STSIN MSGIN の実行待ち
  164.     bne    @f
  165.     rts
  166. @@:
  167. _scsi_cmd_chk_s:
  168.     link a6,#-4
  169.     movem.l    d0-d6/a1,-(sp)
  170.     clr.w    _ScscChksw        *1;STSIN MSGIN の実行待ち
  171.  
  172.     lea    -1(a6),a1
  173.     SCSI__    _S_STSIN
  174.     tst.l    d0
  175.     beq    @f
  176.     *moveq    #-2,d0        *エラー
  177.     bra    1f
  178. @@:
  179.     lea    -3(a6),a1
  180.     SCSI__    _S_MSGIN
  181.     tst.l    d0
  182.     beq    @f
  183.     *moveq    #-1,d0        *エラー
  184.     bra    1f
  185. @@:
  186.     moveq    #0,d0
  187.     move.b    -3(a6),d0
  188.     swap    d0
  189.     move.b    -1(a6),d0
  190. *    cmpi.l    #2,d0
  191. *    bne    @f
  192. *    jbsr    _REQUEST_SENSE
  193. @@:
  194. 1:
  195.     clr.w    _ScscUse
  196.     movem.l    (sp)+,d0-d6/a1
  197.     unlk a6
  198.     rts
  199.  
  200.  
  201.  
  202.  
  203. **************************************************
  204. *
  205. *    TESTUNIT  &  REQUEST SENSE
  206. *
  207. **************************************************
  208.     .globl    _scsi_testunit
  209. _scsi_testunit:
  210.     link a6,#0
  211.     movem.l d3/d4,-(sp)
  212.     move.l    8(a6),d4
  213.     SCSI__    _S_TESTUNIT
  214.     cmpi.l  #2,d0
  215.     bne    @f
  216.     jbsr    _REQUEST_SENSE
  217. @@:    movem.l (sp)+,d3/d4
  218.     unlk    a6
  219.     rts
  220.  
  221.  
  222. **************************************************
  223. *
  224. *    INQUIRY  &  REQUEST SENSE
  225. *
  226. **************************************************
  227.     .globl    _scsi_inquiry
  228. _scsi_inquiry:
  229.     movem.l    d3-d4,-(sp)
  230.     move.l    $000c(sp),d3
  231.     move.l    $0010(sp),d4
  232.     movea.l    $0014(sp),a1
  233.     SCSI__    _S_INQUIRY
  234.     cmpi.l  #2,d0
  235.     bne    @f
  236.     jbsr    _REQUEST_SENSE
  237. @@:    movem.l    (sp)+,d3-d4
  238.     rts
  239.  
  240.  
  241. **************************************************
  242. *
  243. *    REZEROUNIT  &  REQUEST SENSE
  244. *
  245. **************************************************
  246.     .globl    _scsi_rezerounit
  247. _scsi_rezerounit:
  248.     move.l d4,-(sp)
  249.     move.l    8(sp),d4
  250.     SCSI__    _S_REZEROUNIT
  251.     cmpi.l  #2,d0
  252.     bne    @f
  253.     jbsr    _REQUEST_SENSE
  254. @@:    move.l (sp)+,d4
  255.     rts
  256.  
  257.  
  258. **************************************************
  259. *
  260. *    MODESENSE/MODESELECT
  261. *
  262. **************************************************
  263.     .globl    _scsi_modeselect
  264. _scsi_modeselect:
  265.     movem.l    d3-d4,-(sp)
  266.     move.l    $000c(sp),d2
  267.     moveq    #$00,d3
  268.     move.w    $0012(sp),d3
  269.     move.l    $0014(sp),d4
  270.     movea.l    $0018(sp),a1
  271.     SCSI__    $2A            * MODESELECT
  272.     movem.l    (sp)+,d3-d4
  273.     rts
  274.  
  275.     .globl    _scsi_modesense
  276. _scsi_modesense:
  277.     movem.l    d3-d4,-(sp)
  278.     move.l    $000c(sp),d2
  279.     moveq    #$00,d3
  280.     move.w    $0012(sp),d3
  281.     move.l    $0014(sp),d4
  282.     movea.l    $0018(sp),a1
  283.     SCSI__    $29            * MODESENSE
  284.     movem.l    (sp)+,d3-d4
  285.     rts
  286.  
  287. **************************************************
  288. *
  289. *    CDDEV.SYS オーディオコール
  290. *
  291. **************************************************
  292.     .globl    _cdd_ioctrl
  293. _cdd_ioctrl:
  294.     move.l    4(sp),d0    *com
  295.     move.l    8(sp),d1    *buf
  296.     move.l    d1,-(sp)    *buf
  297.     move.w    d0,-(sp)    *com
  298.     move.w    _CddDrvNo,-(sp)
  299.     move.w    #13,-(sp)
  300.     DOS    _IOCTRL
  301.     lea    10(sp),sp
  302.     rts
  303.  
  304. **************************************************
  305. *
  306. *    掛け算! (LIBCより..)
  307. *
  308. **************************************************
  309. ___mulsi3::
  310.     movem.l    $0004(sp),d1
  311.     move.l    d1,d0
  312.     swap.w    d1
  313.     or.w    $0008(sp),d1
  314.     bne    CLC0052
  315.     mulu.w    $000a(sp),d0
  316.     rts
  317.  
  318. CLC0052:
  319.     move.l    $0008(sp),d1
  320.     movea.l    d3,a0
  321.     move.l    d0,d2
  322.     mulu.w    d1,d0
  323.     move.l    d2,d3
  324.     swap.w    d3
  325.     mulu.w    d1,d3
  326.     swap.w    d0
  327.     add.w    d3,d0
  328.     swap.w    d1
  329.     mulu.w    d2,d1
  330.     add.w    d1,d0
  331.     swap.w    d0
  332.     move.l    a0,d3
  333.     rts
  334.  
  335. ___divsi3::
  336.     move.l    $0004(sp),d1
  337.     move.l    d1,d0
  338.     swap.w    d0
  339.     or.w    $0008(sp),d0
  340.     bne    CLC008a
  341.     divu.w    $000a(sp),d1
  342.     moveq.l    #$00,d0
  343.     move.w    d1,d0
  344.     rts
  345.  
  346. CLC008a:
  347.     move.l    d1,d0
  348.     bpl    CLC00a2
  349.     neg.l    d0
  350.     move.l    $0008(sp),d1
  351.     beq    CLC00b2
  352.     bpl    CLC009c
  353.     neg.l    d1
  354. CLC009a:
  355.     bra    CLC0104
  356. CLC009c:
  357.     bsr    CLC0104
  358.     neg.l    d0
  359.     rts
  360.  
  361. CLC00a2:
  362.     move.l    $0008(sp),d1
  363.     beq    CLC00b2
  364.     bpl    CLC009a
  365.     neg.l    d1
  366.     bsr    CLC0104
  367.     neg.l    d0
  368.     rts
  369.  
  370. CLC00b2:
  371.     moveq.l    #$00,d0
  372.     rts
  373.  
  374. CLC00b6:
  375.     moveq.l    #$01,d0
  376.     rts
  377.  
  378. CLC00ba:
  379.     moveq.l    #$00,d1
  380.     divu.w    d1,d0
  381.     rts
  382.  
  383. CLC00c0:
  384.     move.l    d0,d2
  385.     clr.w    d2
  386.     swap.w    d2
  387.     divu.w    d1,d2
  388.     movea.l    d2,a0
  389.     move.w    d0,d2
  390.     divu.w    d1,d2
  391.     move.w    a0,d0
  392.     swap.w    d0
  393.     move.w    d2,d0
  394.     rts
  395.  
  396. CLC00d6:
  397.     swap.w    d0
  398.     swap.w    d1
  399.     divu.w    d1,d0
  400.     and.l    #$0000ffff,d0
  401.     rts
  402.  
  403. ___udivsi3::
  404.     move.l    $0004(sp),d1
  405.     move.l    d1,d0
  406.     swap.w    d0
  407.     or.w    $0008(sp),d0
  408.     bne    CLC00fc
  409.     divu.w    $000a(sp),d1
  410.     moveq.l    #$00,d0
  411.     move.w    d1,d0
  412.     rts
  413.  
  414. CLC00fc:
  415.     move.l    d1,d0
  416.     move.l    $0008(sp),d1
  417.     beq    CLC00b2
  418. CLC0104:
  419.     cmp.l    d0,d1
  420.     beq    CLC00b6
  421.     bhi    CLC00b2
  422.     cmp.l    #$00010000,d1
  423.     bcs    CLC00c0
  424.     move.w    d0,d2
  425.     or.w    d1,d2
  426.     beq    CLC00d6
  427.     movea.l    d0,a1
  428.     movea.l    d1,a2
  429.     cmp.l    #$01000000,d1
  430.     bcc    CLC0132
  431.     move.l    d1,d2
  432.     swap.w    d2
  433.     move.b    CLC0162(pc,d2.w),d2
  434.     lsr.l    d2,d1
  435.     lsr.l    d2,d0
  436.     bra    CLC0142
  437. CLC0132:
  438.     move.l    d1,d2
  439.     swap.w    d2
  440.     lsr.w    #8,d2
  441.     move.b    CLC0162(pc,d2.w),d2
  442.     addq.w    #8,d2
  443.     lsr.l    d2,d1
  444.     lsr.l    d2,d0
  445. CLC0142:
  446.     divu.w    d1,d0
  447.     and.l    #$0000ffff,d0
  448.     move.l    d0,d2
  449.     move.l    a2,d1
  450.     mulu.w    d1,d2
  451.     swap.w    d1
  452.     mulu.w    d0,d1
  453.     swap.w    d1
  454.     clr.w    d1
  455.     add.l    d1,d2
  456.     cmp.l    a1,d2
  457.     bls    CLC0160
  458.     subq.l    #1,d0
  459. CLC0160:
  460.     rts
  461.  
  462. CLC0162:
  463.     .dc.b    $00,$01,$02,$02,$03,$03,$03,$03
  464.     .dc.b    $04,$04,$04,$04,$04,$04,$04,$04
  465.     .dc.b    $05,$05,$05,$05,$05,$05,$05,$05
  466.     .dc.b    $05,$05,$05,$05,$05,$05,$05,$05
  467.     .dc.b    $06,$06,$06,$06,$06,$06,$06,$06
  468.     .dc.b    $06,$06,$06,$06,$06,$06,$06,$06
  469.     .dc.b    $06,$06,$06,$06,$06,$06,$06,$06
  470.     .dc.b    $06,$06,$06,$06,$06,$06,$06,$06
  471.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  472.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  473.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  474.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  475.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  476.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  477.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  478.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  479.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  480.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  481.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  482.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  483.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  484.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  485.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  486.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  487.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  488.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  489.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  490.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  491.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  492.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  493.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  494.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  495. CLC0262:
  496.     move.l    #$7fffffff,d0
  497.     rts
  498.  
  499. CLC026a:
  500.     moveq.l    #$00,d0
  501. CLC026c:
  502.     rts
  503.  
  504. .if 0
  505.  
  506. ___modsi3::
  507.     move.l    $0008(sp),d1
  508.     beq    CLC0262
  509.     move.l    $0004(sp),d0
  510.     movea.w    d1,a0
  511.     cmpa.l    d1,a0
  512.     bne    CLC028c
  513.     movea.w    d0,a0
  514.     cmpa.l    d0,a0
  515.     bne    CLC028c
  516.     divs.w    d1,d0
  517.     swap.w    d0
  518.     ext.l    d0
  519.     rts
  520.  
  521. CLC028c:
  522.     tst.l    d1
  523.     bmi    CLC029c
  524.     tst.l    d0
  525.     bpl    CLC02e4
  526.     neg.l    d0
  527.     bsr    CLC02e4
  528.     neg.l    d0
  529.     rts
  530.  
  531. CLC029c:
  532.     tst.l    d0
  533.     bmi    CLC02a4
  534.     neg.l    d1
  535.     bra    CLC02e4
  536. CLC02a4:
  537.     neg.l    d0
  538.     neg.l    d1
  539.     bsr    CLC02e4
  540.     neg.l    d0
  541.     rts
  542.  
  543. CLC02ae:
  544.     move.l    d0,d2
  545.     swap.w    d2
  546.     cmp.w    d1,d2
  547.     bcc    CLC02be
  548.     divu.w    d1,d0
  549.     clr.w    d0
  550.     swap.w    d0
  551.     rts
  552.  
  553. CLC02be:
  554.     move.l    d0,d2
  555.     clr.w    d0
  556.     swap.w    d0
  557.     divu.w    d1,d0
  558.     move.w    d2,d0
  559.     divu.w    d1,d0
  560.     clr.w    d0
  561.     swap.w    d0
  562.     rts
  563.  
  564. CLC02d0:
  565.     swap.w    d0
  566.     swap.w    d1
  567.     divu.w    d1,d0
  568.     clr.w    d0
  569.     rts
  570.  
  571. ___umodsi3::
  572.     move.l    $0008(sp),d1
  573.     beq    CLC0262
  574.     move.l    $0004(sp),d0
  575. CLC02e4:
  576.     cmp.l    d0,d1
  577.     beq    CLC026a
  578.     bhi    CLC026c
  579.     cmp.l    #$00010000,d1
  580.     bcs    CLC02ae
  581.     move.w    d0,d2
  582.     or.w    d1,d2
  583.     beq    CLC02d0
  584.     movea.l    d0,a1
  585.     movea.l    d1,a2
  586.     cmp.l    #$01000000,d1
  587.     bcc    CLC0312
  588.     move.l    d1,d2
  589.     swap.w    d2
  590.     move.b    CLC033e(pc,d2.w),d2
  591.     lsr.l    d2,d1
  592.     lsr.l    d2,d0
  593.     bra    CLC0322
  594. CLC0312:
  595.     move.l    d1,d2
  596.     swap.w    d2
  597.     lsr.w    #8,d2
  598.     move.b    CLC033e(pc,d2.w),d2
  599.     addq.w    #8,d2
  600.     lsr.l    d2,d1
  601.     lsr.l    d2,d0
  602. CLC0322:
  603.     divu.w    d1,d0
  604.     move.w    d0,d2
  605.     move.l    a2,d1
  606.     mulu.w    d1,d2
  607.     swap.w    d1
  608.     mulu.w    d0,d1
  609.     swap.w    d1
  610.     clr.w    d1
  611.     add.l    d1,d2
  612.     move.l    a1,d0
  613.     sub.l    d2,d0
  614.     bpl    CLC033c
  615.     add.l    a2,d0
  616. CLC033c:
  617.     rts
  618.  
  619. CLC033e:
  620.     .dc.b    $00,$01,$02,$02,$03,$03,$03,$03
  621.     .dc.b    $04,$04,$04,$04,$04,$04,$04,$04
  622.     .dc.b    $05,$05,$05,$05,$05,$05,$05,$05
  623.     .dc.b    $05,$05,$05,$05,$05,$05,$05,$05
  624.     .dc.b    $06,$06,$06,$06,$06,$06,$06,$06
  625.     .dc.b    $06,$06,$06,$06,$06,$06,$06,$06
  626.     .dc.b    $06,$06,$06,$06,$06,$06,$06,$06
  627.     .dc.b    $06,$06,$06,$06,$06,$06,$06,$06
  628.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  629.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  630.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  631.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  632.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  633.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  634.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  635.     .dc.b    $07,$07,$07,$07,$07,$07,$07,$07
  636.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  637.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  638.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  639.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  640.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  641.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  642.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  643.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  644.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  645.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  646.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  647.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  648.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  649.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  650.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  651.     .dc.b    $08,$08,$08,$08,$08,$08,$08,$08
  652.  
  653. .endif
  654.